/**
 * 
 */
package co.edu.uniquindio.logica;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 
 * Esta calse representa a un motor de loas aotomoviles en la loguica de negocio 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 *
 */
@Entity
@Table(name="Motor")
public class Motor implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * este atributo representa la referencia del motor del auto y es la llave primaria de la clase
	 */
	@Id
	private int referencia;
	/**
	 * este atributo representa la potencia nominal del motor
	 */
	private int potencia;
	/**
	 * este atributo representa el espacio en centimetros cubicos de la camara de combustion del motor
	 */
	private int cilindraje;
	/**
	 * esta relacion representa que un automovil solo tiene un motor
	 */
	@OneToOne(mappedBy = "motor")
	private Automovil automovil;
	/**
	 * este metodo permite la creacion de un nuevo motor
	 * @param referencia
	 * @param potencia
	 * @param cilindraje
	 * @param velocidades
	 */
	public Motor(int referencia, int potencia,int cilindraje)
	{
		this.cilindraje=cilindraje;
		this.potencia=potencia;
		this.referencia= referencia;
	}
    /**
     * este es el metodo constructor obligatorio
     */
	public Motor()
	{
		
	}

	/**
	 * metodo para obtener la referencia del motor
	 * @return the referencia
	 */
	public int getReferencia() {
		return referencia;
	}

	/**
	 * metodo para especificar la referencia del motor
	 * @param referencia the referencia to set
	 */
	public void setReferencia(int referencia) {
		this.referencia = referencia;
	}

	/**
	 * metodo para obtener la potencia del motor
	 * @return the potencia
	 */
	public int getPotencia() {
		return potencia;
	}

	/**
	 * metodo para especificar la potencia del motor
	 * @param potencia the potencia to set
	 */
	public void setPotencia(int potencia) {
		this.potencia = potencia;
	}

	/**
	 * metodo para obtener el valor del cilindraje del motor
	 * @return the cilindraje
	 */
	public int getCilindraje() {
		return cilindraje;
	}

	/**
	 * metodo para especificar el cilindraje del motor
	 * @param cilindraje the cilindraje to set
	 */
	public void setCilindraje(int cilindraje) {
		this.cilindraje = cilindraje;
	}

	
	/**
	 * metodo que retorna el automovil al cual pertenece el motor
	 * @return the automovil
	 */
	public Automovil getAutomovil() {
		return automovil;
	}
	/**
	 * metodo para especificar a que automovil pertenece este motor
	 * @param automovil the automovil to set
	 */
	public void setAutomovil(Automovil automovil) {
		this.automovil = automovil;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + referencia;
		return result;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return  ""+referencia;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Motor other = (Motor) obj;
		if (referencia != other.referencia)
			return false;
		return true;
	}
	
}
